#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
FastAPI应用启动脚本
支持热重载、异步功能和自定义配置
"""

import uvicorn
import argparse
import os
import sys

def main():
    parser = argparse.ArgumentParser(description='启动FastAPI提示词管理系统')
    parser.add_argument('--host', default='0.0.0.0', help='服务器主机地址 (默认: 0.0.0.0)')
    parser.add_argument('--port', type=int, default=8888, help='服务器端口 (默认: 8888)')
    parser.add_argument('--reload', action='store_true', default=True, help='启用热重载 (默认: True)')
    parser.add_argument('--no-reload', action='store_true', help='禁用热重载')
    parser.add_argument('--workers', type=int, default=1, help='工作进程数 (默认: 1)')
    parser.add_argument('--log-level', default='info', choices=['critical', 'error', 'warning', 'info', 'debug', 'trace'], help='日志级别 (默认: info)')
    parser.add_argument('--access-log', action='store_true', help='启用访问日志')
    
    args = parser.parse_args()
    
    # 如果指定了--no-reload，则禁用热重载
    if args.no_reload:
        args.reload = False
    
    # 检查必要文件是否存在
    required_files = ['fastapi_app.py', 'prompt_manager.py', 'models.py']
    for file in required_files:
        if not os.path.exists(file):
            print(f"错误: 找不到必要文件 {file}")
            sys.exit(1)
    
    # 检查模板目录
    if not os.path.exists('templates'):
        print("错误: 找不到templates目录")
        sys.exit(1)
    
    print("="*60)
    print("🚀 FastAPI 提示词管理系统")
    print("="*60)
    print(f"📡 服务器地址: http://{args.host}:{args.port}")
    print(f"📚 API文档: http://{args.host}:{args.port}/docs")
    print(f"📖 ReDoc文档: http://{args.host}:{args.port}/redoc")
    print(f"🔄 热重载: {'启用' if args.reload else '禁用'}")
    print(f"👥 工作进程: {args.workers}")
    print(f"📝 日志级别: {args.log_level}")
    print("="*60)
    print("按 Ctrl+C 停止服务")
    print("="*60)
    
    # 配置uvicorn参数
    config = {
        'app': 'fastapi_app:app',
        'host': args.host,
        'port': args.port,
        'log_level': args.log_level,
        'access_log': args.access_log
    }
    
    # 根据是否启用热重载设置不同参数
    if args.reload:
        config.update({
            'reload': True,
            'reload_dirs': ['.', 'templates', 'data'],
            'reload_includes': ['*.py', '*.html', '*.json']
        })
    else:
        config.update({
            'workers': args.workers
        })
    
    try:
        uvicorn.run(**config)
    except KeyboardInterrupt:
        print("\n🛑 服务已停止")
    except Exception as e:
        print(f"❌ 启动失败: {e}")
        sys.exit(1)

if __name__ == '__main__':
    main()